#ifndef __INF_FOUR_WAY_KEY_H__
#define __INF_FOUR_WAY_KEY_H__

#include "common_button.h"
#include "common_config.h"

#include <stdbool.h>
#include <stdint.h>

#define FOUR_WAY_KEY_PRESS_LEVEL   1 /* 四向按键被按下时的电平 */
#define FOUR_WAY_KEY_RELEASE_LEVEL 0 /* 四向按键被释放时的电平 */

typedef void (*key_callback_f)(void);

/**
 * @brief 四向按键类型枚举
 *
 */
typedef enum
{
    KEY_TYPE_UP    = 0U,
    KEY_TYPE_DOWN  = 1U,
    KEY_TYPE_LEFT  = 2U,
    KEY_TYPE_RIGHT = 3U,
    KEY_TYPE_MID   = 4U,
    KEY_TYPE_MAX,
    KEY_TYPE_INVALID, /*!< 无效四向按键类型, 即未按下任何按键 */
} key_type_e;

/**
 * @brief 四向按键模式枚举
 *
 */
typedef enum
{
    KEY_MODE_LUMBAR  = 0U,
    KEY_MODE_MASSAGE = 1U,
    KEY_MODE_MAX,
} key_mode_e;

/**
 * @brief 四向按键结构体
 *
 */
typedef struct
{
    key_mode_e     mode;                    /*!< 四向按键模式 */
    key_type_e     cur_type;                /*!< 当前四向按键类型 */
    button_t       buttons[KEY_TYPE_MAX];   /*!< 四向按键按钮数组 */
    key_callback_f callbacks[KEY_TYPE_MAX]; /*!< 四向按键回调函数数组 */
} four_way_key_t;

extern four_way_key_t four_way_key;

result_e inf_four_way_key_init(void);
result_e inf_four_way_key_set_level(key_type_e type, uint8_t level);
void     inf_four_way_key_handle(void);

#endif
